﻿using System.Linq;
using System.ServiceModel.DomainServices.Client;
using System.Windows;
using System.Windows.Controls;
using GSSoftSL.Utility;
using GSSoftSL.ViewModel;
using GSSoftSL.ViewModel.HocVienVM;
using GSSoftSL.Web;
using GSSoftSL.Web.Models;

namespace GSSoftSL.Views.NghiepVu
{
    /// <summary>
    /// Description for DiemDanhChonNgay.
    /// </summary>
    public partial class DiemDanhChonNgay : ChildWindow
    {
        private EnumMode _mode = EnumMode.AddNew;

        /// <summary>
        /// Initializes a new instance of the DiemDanhChonNgay class.
        /// </summary>
        public DiemDanhChonNgay()
        {
            InitializeComponent();
            //this.DataContext = mainVM;
        }

        private void btnOK_Click(object sender, System.Windows.RoutedEventArgs e)
        {
        	// TODO: Add event handler implementation here.
            this.Close();
        }

        private void btnThoat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
        	this.Close();
        }

        public void SetMode(EnumMode mode)
        {
            _mode = mode;
            if (mode == EnumMode.AddNew)
            {
                cboLop.IsEnabled = cboMon.IsEnabled = true;
                btnOK.Visibility = Visibility.Visible;
                btnOKEdit.Visibility = Visibility.Collapsed;
            }
            else
            {
                cboLop.IsEnabled = cboMon.IsEnabled = false;
                btnOK.Visibility = Visibility.Collapsed;
                btnOKEdit.Visibility = Visibility.Visible;
            }
        }

        private void btnOKEdit_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            DiemDanhViewModel vm = this.DataContext as DiemDanhViewModel;
            if (vm.Mon == null || vm.Lop == null || vm.KhoaHoc == null || vm.BuoiHoc == -1)
            {
                vm.Mode = EnumMode.Unspecified;
                MessageWindow.CreateNew("Bạn vui lòng nhập đầy đủ thông tin.");
                return;
            }
            else
            {
                vm.IsBusy = true;
                if (vm.Mode == EnumMode.AddNew)
                {
                    vm.DC.Load(vm.DC.GetDiemDanhsQuery()
                                   .Where(n => n.KhoaHocId == vm.KhoaHoc.KhoaHocId &&
                                               n.KhoaHocId == vm.KhoaHoc.KhoaHocId &&
                                               n.NgayDiemDanh == vm.NgayDiemDanh.Date &&
                                               n.BuoiHoc == vm.BuoiHoc),
                               LoadBehavior.RefreshCurrent, CheckModifyDiemDanh_Completed, vm);
                }
                else
                {
                    vm.DC.Load(vm.DC.GetDiemDanhsQuery()
                                   .Where(n => n.KhoaHocId == vm.KhoaHoc.KhoaHocId &&
                                               n.KhoaHocId == vm.KhoaHoc.KhoaHocId &&
                                               n.NgayDiemDanh == vm.NgayDiemDanh.Date &&
                                               n.BuoiHoc == vm.BuoiHoc &&
                                               n.DiemDanhId != vm.DiemDanh.DiemDanhId),
                               LoadBehavior.RefreshCurrent, CheckModifyDiemDanh_Completed, vm);
                }
            }
        }

        private void CheckModifyDiemDanh_Completed(LoadOperation<DiemDanh> load)
        {
            DiemDanhViewModel vm = this.DataContext as DiemDanhViewModel;
            if (load.HasError)
            {
                vm.Mode = EnumMode.Error;
                MessageWindow.CreateNew("Thao tác không thành công. Vui lòng thử lại lần nữa.");
            }
            else
            {
                if (load.Entities.Count() > 0)
                {
                    MessageWindow.CreateNew("Đã có buổi điểm danh với thông tin trên, bạn không được phép thực hiện thao tác này.");
                }
                else
                {
                    vm.Info.LopId = vm.Lop.LopId;
                    vm.Info.KhoaHocId = vm.KhoaHoc.KhoaHocId;
                    vm.Info.NgayDiemDanh = vm.NgayDiemDanh;
                    vm.Info.BuoiHoc = (EnumBuoiHoc)vm.BuoiHoc;
                    vm.Info.TenLop = vm.Lop.TenLop;
                    vm.Info.TenKhoaHoc = vm.KhoaHoc.TenKhoaHoc;
                    this.Close();
                }
            }
            vm.IsBusy = false;
        }
    }
}